package com.jiangyg.mall.seckill.constant;

import com.jiangyg.mall.core.utils.time.DateUtils;

import java.util.Date;

/**
 * 类描述：缓存常量
 *
 * @author jiangyg
 * @date 2022-01-03
 */
public final class CacheConstant {

    /**
     * 秒杀商品上架锁
     */
    public static final String SECKILL_UPDATE_LOCK_KEY = "lock:seckill:update";

    /**
     * 秒杀场次时间
     */
    public static final String SECKILL_SESSION_TIME_KEY = "seckill:session:time";

    /**
     * 功能描述：生成秒杀活动缓存Key
     *
     * @param promotionId 活动ID
     * @return 结果
     */
    public static String seckillPromotionKey(Object promotionId) {
        return String.format("seckill:promotion:%s", String.valueOf(promotionId));
    }

    /**
     * 功能描述：生成秒杀场次缓存Key
     *
     * @param promotionId 活动Id
     * @param date        秒杀日期
     * @param sessionId   场次Id
     * @return 结果
     */
    public static String seckillSessionKey(Object promotionId, Date date, Object sessionId) {
        return String.format("seckill:session:%s:%s:%s",
                String.valueOf(promotionId),
                DateUtils.format(date),
                String.valueOf(sessionId));
    }

    /**
     * 功能描述：秒杀商品库存量
     *
     * @param uuid 场次中商品uuid
     * @return 结果
     */
    public static String seckillSkuStockKey(String uuid) {
        return String.format("seckill:stock:%s", uuid);
    }

    /**
     * 功能描述：秒杀商品购买标志
     *
     * @param memberId 会员ID
     * @param code     商品随机码
     * @return 结果
     */
    public static String seckillPurchaseKey(Object memberId, Object code) {
        return String.format("seckill:purchase:%s:%s",
                String.valueOf(memberId),
                String.valueOf(code));
    }

}
